﻿var vItem = 1;

function recalcularTotal() {
    var total = 0;
    if (!Ext.isEmpty(Ext.StoreMgr.get('storePedidoDetalle'))) {
        Ext.StoreMgr.get('storePedidoDetalle').each(function (det) {
            total += Ext.util.Format.number(det.get('precio'), '0.00') * det.get('cantidad');
        });
    }
    Ext.getCmp('tfTotal').setValue(Ext.util.Format.number(total, '0.00'));
}

Ext.define('Pedido', {
    extend: 'ABMBase',
    Title: 'Formulario ABM Pedido',
    Model: 'Model.Pedido',
    defaultPropertySort: 'fecha',
    storePedidoDetalle: CreateForeignStore('storePedidoDetalle', 'Model.PedidoDetalle'),
    storeArticulos: CreateForeignStore('storeArticulos', 'Model.Articulos'),
    storeEntidad: CreateForeignStore('storeEntidad', 'Model.Comercios'),
    storeProveedores: CreateForeignStore('storeProveedores', 'Model.Proveedores'),
    storeDescRec: Ext.create('Ext.data.Store', {
        storeId: 'storeDescRec',
        autoLoad: true,
        model: 'Model.DesRec',
        proxy: {
            type: 'ajax',
            url: 'Handlers/Mantenimiento/Precios/Pedido.ashx?action=ListDescRec',
            reader: {
                type: 'json',
                root: 'gridData',
                messageProperty: 'message'
            }
        },
        pageSize: -1
    }),
    listeners: {
        Creando: function (rcd) {
            rcd.record.set('id_pedido', activeInstance.GetNum('PEDIDO   '));
            rcd.record.set('fecha', new Date());
            rcd.record.set('id_entidad_com', activeInstance.EjecutarEnServidor('ObtenerEntidadOperador'));
            Ext.StoreMgr.get('storePedidoDetalle').reload({
                params: { filter: '[{ "type": "numeric", "comparison": "eq", "value": -1, "field": "id_pedido"}]' }
            });
            vItem = 1;
            Ext.getCmp('cbArticuloPedido').setReadOnly(true);
            Ext.getCmp('cbEntidadProveedor').setReadOnly(false);
        },
        Editando: function (rcd) {
            Ext.getCmp('cbArticuloPedido').setReadOnly(false);
            Ext.getCmp('cbEntidadProveedor').setReadOnly(true);
            Ext.StoreMgr.get('storePedidoDetalle').reload({
                params: { filter: '[{ "type": "numeric", "comparison": "eq", "value": ' + rcd.record.get('id_pedido') + ', "field": "id_pedido"}]' },
                callback: function () {
                    vItem = Ext.StoreMgr.get('storePedidoDetalle').max('item') || 0;
                    vItem++;
                }
            });
            var goper = activeInstance.ObtenerGrupoOperador();
            if (Ext.String.trim(goper) == 'PROVEEDOR') {
                Ext.getCmp('formWindow').cascade(function (itm) {
                    if (itm instanceof Ext.form.field.Base) {
                        itm.setReadOnly(true);
                    }
                });
                Ext.getCmp('cbArticuloPedido').setVisible(false);
                Ext.getCmp('acBorrarArticulo').setVisible(false);
                Ext.getCmp('btnFormWindowAceptar').setVisible(false);
            }
        },
        Actualizado: function (rcd, success) {
            if (success) {
                Ext.StoreMgr.get('storePedidoDetalle').sync();
            }
        }
    },
    WindowPanel: [{
        xtype: 'fieldset',
        title: 'Cabecera',
        collapsible: true,
        items: [{
            xtype: 'container',
            frame: true,
            layout: 'column',
            items: [{
                xtype: 'fieldset',
                columnWidth: 0.5,
                border: false,
                items: [{
                    xtype: 'textfield',
                    id: 'tfIdPedido',
                    fieldLabel: 'Identificador',
                    name: 'id_pedido',
                    maxLength: 10,
                    enforceMaxLength: true,
                    allowBlank: false
                }, {
                    xtype: 'datefield',
                    fieldLabel: 'Fecha de Alta',
                    name: 'fecha',
                    allowBlank: false,
                    readOnly: true
                }, {
                    xtype: 'combobox',
                    id: 'cbEntidadProveedor',
                    fieldLabel: 'Entidad Proveedor',
                    queryMode: 'local',
                    displayField: 'nombre',
                    valueField: 'id_entidad',
                    editable: true,
                    forceSelection: true,
                    store: Ext.StoreMgr.get('storeProveedores'),
                    allowBlank: false,
                    name: 'id_entidad_pro',
                    listeners: {
                        change: function (cb, nValue) {
                            if (!Ext.isEmpty(nValue)) {
                                Ext.getCmp('cbArticuloPedido').setReadOnly(false);
                                Ext.StoreMgr.get('storeArticulos').reload({
                                    params: { filter: '[{ "type": "numeric", "comparison": "eq", "value": ' + nValue + ', "field": "id_entidad"}]' }
                                });
                            }
                        }
                    }
                }, {
                    xtype: 'combobox',
                    fieldLabel: 'Comercio',
                    queryMode: 'local',
                    displayField: 'nombre',
                    valueField: 'id_entidad',
                    editable: true,
                    forceSelection: true,
                    store: Ext.StoreMgr.get('storeEntidad'),
                    readOnly: true,
                    allowBlank: false,
                    name: 'id_entidad_com'
                }]
            }, {
                xtype: 'fieldset',
                columnWidth: 0.5,
                border: false,
                items: [{
                    xtype: 'datefield',
                    fieldLabel: 'Fecha de Entrega',
                    name: 'fecha_entrega',
                    allowBlank: false
                }, {
                    xtype: 'datefield',
                    fieldLabel: 'Fecha de Pago',
                    name: 'fecha_pago',
                    allowBlank: false
                }, {
                    xtype: 'textfield',
                    id: 'tfTotal',
                    fieldLabel: 'Total',
                    name: 'total',
                    readOnly: true
                }]
            }]
        }]
    }, {
        xtype: 'fieldset',
        title: 'Detalle',
        collapsible: true,
        items: [{
            xtype: 'grid',
            id: 'grdPedidoDetalle',
            height: 200,
            store: Ext.StoreMgr.get('storePedidoDetalle'),
            tbar: [{
                xtype: 'combobox',
                id: 'cbArticuloPedido',
                queryMode: 'local',
                displayField: 'descripcion',
                valueField: 'id_articulo',
                editable: true,
                forceSelection: true,
                store: Ext.StoreMgr.get('storeArticulos'),
                readOnly: true,
                listeners: {
                    select: function (cbo, rcd, eOpt) {
                        if (Ext.isEmpty(Ext.StoreMgr.get('storePedidoDetalle').getById(rcd[0].get('id_articulo')))) {
                            var model = Ext.ModelManager.getModel('Model.PedidoDetalle');
                            var strDesRec = Ext.StoreMgr.lookup('storeDescRec');
                            var record = new model();
                            var idArticulo = rcd[0].get('id_articulo');
                            var idRubro = rcd[0].get('id_rubro');
                            var idEntidad = rcd[0].get('id_entidad');
                            var idCategArt = rcd[0].get('id_categ_art');
                            var precio = rcd[0].get('precio');


                            strDesRec.clearFilter(true);
                            strDesRec.filterBy(function (rDesRec) {
                                return rDesRec.get('id_entidad') == idEntidad || rDesRec.get('id_rubro') == idRubro || rDesRec.get('id_categ_art') == idCategArt || rDesRec.get('id_articulo') == idArticulo;
                            });
                            strDesRec.sort('orden_aplica', 'ASC');
                            strDesRec.each(function (rDesRec) {
                                precio += (precio * (rDesRec.get('signo') * rDesRec.get('porcentaje')) / 100);
                            });

                            record.set('item', vItem++);
                            record.set('id_pedido', Ext.getCmp('tfIdPedido').getValue());
                            record.set('id_articulo', rcd[0].get('id_articulo'));
                            record.set('descripcion', rcd[0].get('descripcion'));
                            record.set('precio', precio);
                            record.set('precioTotal', precio * 1);
                            Ext.StoreMgr.get('storePedidoDetalle').add(record);

                            recalcularTotal();
                        }
                        if (Ext.StoreMgr.get('storePedidoDetalle').data.length > 0)
                            Ext.getCmp('cbEntidadProveedor').setReadOnly(true);
                        else
                            Ext.getCmp('cbEntidadProveedor').setReadOnly(false);
                    }
                }
            }],
            listeners: {
                edit: function () {
                    recalcularTotal();
                    if (Ext.getCmp('mainGrid').getSelectionModel().getSelection().length > 0)
                        Ext.getCmp('mainGrid').getSelectionModel().getSelection()[0].setDirty();
                }
            },
            plugins: [Ext.create('Ext.grid.plugin.CellEditing', {
                clicksToEdit: 1
            })],
            columns: [
                { header: 'Item', dataIndex: 'item' },
                { header: 'Descripcion', dataIndex: 'descripcion', flex: 1 },
                { header: 'Precio', dataIndex: 'precio', xtype: 'numbercolumn', format: '0.00' },
                { header: 'Cantidad', dataIndex: 'cantidad', xtype: 'numbercolumn', format: '0', editor: {
                    xtype: 'numberfield',
                    name: 'cantidad',
                    maxValue: 99,
                    minValue: 0,
                    allowBlank: false
                }
                },
                { header: 'Precio Total', dataIndex: 'precioTotal', xtype: 'numbercolumn', format: '0.00', renderer: function (value, mData, record) { return Ext.util.Format.number(Ext.util.Format.number(record.get('precio'), '0.00') * record.get('cantidad'), '0.00'); } },
                {
                    xtype: 'actioncolumn',
                    id: 'acBorrarArticulo',
                    width: 50,
                    menuDisabled: true,
                    items: [{
                        iconCls: 'boton-Borrar',
                        tooltip: 'Borrar',
                        handler: function (grid, rowIndex, colIndex) {
                            Ext.StoreMgr.get('storePedidoDetalle').remove(Ext.StoreMgr.get('storePedidoDetalle').getAt(rowIndex));
                            recalcularTotal();

                            if (Ext.StoreMgr.get('storePedidoDetalle').data.length > 0)
                                Ext.getCmp('cbEntidadProveedor').setReadOnly(true);
                            else
                                Ext.getCmp('cbEntidadProveedor').setReadOnly(false);
                        }
                    }]
                }
                        ]
        }]
    }, {
        xtype: 'fieldset',
        title: 'Observaciones',
        collapsible: true,
        layout: 'fit',
        items: [{
            xtype: 'textarea',
            hideLabel: true,
            name: 'observaciones'
        }]
    }],
    Columns: [
            { text: 'Identificador', dataIndex: 'id_pedido', filter: true },
            { xtype: 'datecolumn', text: 'Fecha', dataIndex: 'fecha', filter: true },
            { xtype: 'datecolumn', text: 'Fecha Entrega', dataIndex: 'fecha_entrega', filter: true },
            { xtype: 'datecolumn', text: 'Fecha Pago', dataIndex: 'fecha_pago', filter: true },
            { header: 'Total', dataIndex: 'total', xtype: 'numbercolumn', format: '0.00' },
            { text: 'Observaciones', dataIndex: 'observaciones', filter: true }
        ]
});
